]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
systemActions: Create SensorProxy unconditionally
authorFlorian Müllner <fmuellner@gnome.org>
Sat, 15 Jun 2019 14:31:53 +0000 (16:31 +0200)
committerFlorian Müllner <florian.muellner@gmail.com>
Thu, 8 Aug 2019 11:42:28 +0000 (11:42 +0000)
When plugging in a device with sensors that are unsupported by
iio-sensor-proxy, the proxy may quit so fast that the name disappears
from the bus before we get to construct the SensorProxy in response
to the name-appeared handler, resulting in the following warning:

JS ERROR: TypeError: this._sensorProxy is null
_sensorProxyAppeared/this._sensorProxy<@resource:///org/gnome/shell/misc/systemActions.js:217:17
_makeProxyWrapper/</<@resource:///org/gnome/gjs/modules/overrides/Gio.js:243:21

Address this by creating the proxy unconditionally instead of monitoring
the bus name, and using the g-name-owner property to determine whether
iio-sensor-proxy is active.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/1357

js/misc/systemActions.js

index 7ab200a455ecdc82d8f538d97fa8950ff351d08f..d86935f4d18d68a4186cef04574613fc0973d942 100644 (file)
@@ -174,13 +174,21 @@ const SystemActions = GObject.registerClass({
                                           });
         Main.layoutManager.connect('monitors-changed',
                                    () => this._updateOrientationLock());
-        Gio.DBus.system.watch_name(SENSOR_BUS_NAME,
-                                   Gio.BusNameWatcherFlags.NONE,
-                                   () => this._sensorProxyAppeared(),
-                                   () => {
-                                       this._sensorProxy = null;
-                                       this._updateOrientationLock();
-                                   });
+        this._sensorProxy = new SensorProxy(Gio.DBus.system,
+            SENSOR_BUS_NAME,
+            SENSOR_OBJECT_PATH,
+            (proxy, error)  => {
+                if (error)
+                    log(error.message);
+            },
+            null,
+            Gio.DBusProxyFlags.DO_NOT_AUTO_START);
+        this._sensorProxy.connect('g-properties-changed', () => {
+            this._updateOrientationLock();
+        });
+        this._sensorProxy.connect('notify::g-name-owner', () => {
+            this._updateOrientationLock();
+        });
         this._updateOrientationLock();
         this._updateOrientationLockIcon();
 
@@ -223,22 +231,9 @@ const SystemActions = GObject.registerClass({
         return this._actions.get(LOCK_ORIENTATION_ACTION_ID).iconName;
     }
 
-    _sensorProxyAppeared() {
-        this._sensorProxy = new SensorProxy(Gio.DBus.system, SENSOR_BUS_NAME, SENSOR_OBJECT_PATH,
-            (proxy, error)  => {
-                if (error) {
-                    log(error.message);
-                    return;
-                }
-                this._sensorProxy.connect('g-properties-changed',
-                                          () => this._updateOrientationLock());
-                this._updateOrientationLock();
-            });
-    }
-
     _updateOrientationLock() {
         let available = false;
-        if (this._sensorProxy)
+        if (this._sensorProxy.g_name_owner)
             available = this._sensorProxy.HasAccelerometer &&
                         this._monitorManager.get_is_builtin_display_on();